package uestc.lj.basic.sort;

import java.util.Arrays;

/**
 * 冒泡排序
 *
 * @Author:Crazlee
 * @Date:2021/11/20
 */
public class Code02_BubbleSort {
    public static void bubbleSort(int[] array) {
        if (array == null || array.length < 2) {
            return;
        }
        for (int i = array.length - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
                if (array[j] > array[j + 1]) {
                    swap(array, j, j + 1);
                }
            }
        }
    }

    /**
     * 三次异或操作完成交换两个元素的功能
     *
     * @param array 数组
     * @param i     下标
     * @param j     下标
     */
    public static void swap(int[] array, int i, int j) {
        array[i] = array[i] ^ array[j];
        array[j] = array[i] ^ array[j];
        array[i] = array[i] ^ array[j];
    }

    public static void main(String[] args) {
        int[] array = {5, 7, 8, 2, 6, 1, 9, 3, 4};
        System.out.println("冒泡排序之前数组元素为：");
        Arrays.stream(array).forEach(value -> System.out.print(value + " "));
        bubbleSort(array);
        System.out.println();
        System.out.println("冒泡排序之后数组元素为：");
        Arrays.stream(array).forEach(value -> System.out.print(value + " "));
    }
}
